<?php
/*
 * @美潮风
 * @功能说明：基础类统一集成
 * @更新说明：暂无更新
 * @文件名 ApibaseController.class.php
 * @编码 UTF-8
 * @创建时间 2016-3-16 下午2:57:55
 * @创建人 XING
 */

namespace home\Controller;
use Think\Controller;
use Think\Hook;
use Think\Think;
class ApibaseController extends Controller
{
    /*
	 * 美潮风_基类初始化
	 * @date: 2016-3-16 下午2:58:39
	 * @editor: XING
	 */
    public function __construct() {
        Hook::listen('action_begin', $this->config);
        //实例化视图类
        $this->view = Think::instance('Think\View');
        //控制器初始化
        if (method_exists($this, '_initialize'))
            $this->_initialize();
        //登陆状态验证
        if (!is_login() && !in_array(get_class($this), C('FiterControl'))) {
            redirect('/user/login');
        }
        //如果是超级管理员 不需要进行权限验证
        if(session('loginUid') && session('role_id') != 1 && ACTION_NAME != 'login' && ACTION_NAME!='checklogin' && ACTION_NAME != 'loginout'){
            //权限验证
            $Auth = new \Think\Auth();
            //需要验证的规则列表,支持逗号分隔的权限规则或索引数组
            $name = '/'.CONTROLLER_NAME . '/' . ACTION_NAME;
            //当前用户id
            $uid = session('loginUid');
            //分类
            $type = CONTROLLER_NAME;
            //执行check的模式
            $mode = 'url';
            $relation = 'or';
            if (!$Auth->check($name, $uid, $type, $mode, $relation)) {
                $this->assign('waitSecond',2);
                $this->error('没有权限！');
            }
        }
        $this->auth();
    }

    private function auth() {
        //没权限的模块不显示
        if(session('loginUid') && session('role_id') != 1){
            $access = M('auth_group_access g')->join('LEFT JOIN trb_access a ON g.role_id = a.role_id')->where(array('uid'=>session('loginUid')))->find();
            $nodes = substr($access['node_id'],0,-1);
            $nodes_arr = M('node')->where(array('id'=>array('in',$nodes),'pid'=>0))->field('id,pid,name as link,title as tip')->select();
            //找到父级 按父级进行分类 是菜单的
            foreach($nodes_arr as $k=>$val){
                $arr = M('node')->where(array('id'=>array('in',$nodes),'pid'=>$val['id']))->field('name link,title tip')->select();
                $menus[] = array_values(array_merge_recursive(array($val),$arr));
            }
        }else{
            $menus = C('menus');
        }
        $this->assign('menus', $menus);
    }

    /**
     * 向终端 输出json 字符串；
     *
     * $result 不等于 false 时 输出   {'return_code':0, 'data':'数据内容'];
     *
     * $result 等于  false 时 {'return_code':1, 'return_msg':'字符串内容'];
     *
     *    $err 是 model对象时 输出 {'return_code':1, 'return_msg':'model error 内容'];  model error 只取一条
     *    $err 是字符串内容时 输出 {'return_code':1, 'return_msg':'字符串内容'];
     *    $err 是数组内容时 输出 {'return_code':1, 'return_msg':'一条数组值'];
     *
     * @param mix $result
     * @param mix $err
     */
    public function echoJSON($result,$err=null) {
        header('Content-Type:application/json; charset=utf-8');
        if ($result == false) {

            if(is_object($err) && method_exists($err, 'getError')){
                $err= $err->getError(); //如果是error是数组的话，返回第一条 error；
            }
            if(empty($err)){  $err='未知错误';  };
            parent::ajaxReturn(['return_code' => 1, 'return_msg' =>is_array($err)?array_pop($err):$err ] );
        } else {
            parent::ajaxReturn(['return_code' => 0, 'data' => $result]);
        }
    }
    /*
    * @Ajax 成功返回
    * @params $data Array $message string
    * @return json
    * @author lzm
    */

    protected function successAjax($message,$data=array()) {

        return parent::ajaxReturn(array('code'=>1,'message'=>$message,'data'=>$data));
    }

    /*
     * @Ajax 错误返回
     * @params $message string
     * @return json
     * @author lzm
     */

    protected function errorAjax($message) {

        return parent::ajaxReturn(array('code'=>-1,'message'=>$message));
    }
}